

var Base = require('./Base');
var util = require('../tool/util');
var zrColor = require('../tool/color');
var RingShape = require('../shape/Ring');
var SectorShape = require('../shape/Sector');
function Ring(options) {
    Base.call(this, options);
}
util.inherits(Ring, Base);
/**
         * 圆环
         * 
         * @param {Object} addShapeHandle
         * @param {Object} refreshHandle
         */
Ring.prototype._start = function (addShapeHandle, refreshHandle) {
    // 特效默认配置
    var options = util.merge(this.options, {
        textStyle: { color: '#07a' },
        backgroundColor: 'rgba(250, 250, 250, 0.8)',
        effect: {
            x: this.canvasWidth / 2,
            y: this.canvasHeight / 2,
            r0: 60,
            r: 100,
            color: '#bbdcff',
            brushType: 'fill',
            textPosition: 'inside',
            textFont: 'normal 30px verdana',
            textColor: 'rgba(30, 144, 255, 0.6)',
            timeInterval: 100
        }
    });
    var effectOption = options.effect;
    var textStyle = options.textStyle;
    if (textStyle.x == null) {
        textStyle.x = effectOption.x;
    }
    if (textStyle.y == null) {
        textStyle.y = effectOption.y + (effectOption.r0 + effectOption.r) / 2 - 5;
    }
    var textShape = this.createTextShape(options.textStyle);
    var background = this.createBackgroundShape(options.backgroundColor);
    var x = effectOption.x;
    var y = effectOption.y;
    var r0 = effectOption.r0 + 6;
    var r = effectOption.r - 6;
    var color = effectOption.color;
    var darkColor = zrColor.lift(color, 0.1);
    var shapeRing = new RingShape({ highlightStyle: util.clone(effectOption) });
    // 初始化动画元素
    var shapeList = [];
    var clolrList = zrColor.getGradientColors([
        '#ff6400',
        '#ffe100',
        '#97ff00'
    ], 25);
    var preAngle = 15;
    var endAngle = 240;
    for (var i = 0; i < 16; i++) {
        shapeList.push(new SectorShape({
            highlightStyle: {
                x: x,
                y: y,
                r0: r0,
                r: r,
                startAngle: endAngle - preAngle,
                endAngle: endAngle,
                brushType: 'fill',
                color: darkColor
            },
            _color: zrColor.getLinearGradient(x + r0 * Math.cos(endAngle, true), y - r0 * Math.sin(endAngle, true), x + r0 * Math.cos(endAngle - preAngle, true), y - r0 * Math.sin(endAngle - preAngle, true), [
                [
                    0,
                    clolrList[i * 2]
                ],
                [
                    1,
                    clolrList[i * 2 + 1]
                ]
            ])
        }));
        endAngle -= preAngle;
    }
    endAngle = 360;
    for (var i = 0; i < 4; i++) {
        shapeList.push(new SectorShape({
            highlightStyle: {
                x: x,
                y: y,
                r0: r0,
                r: r,
                startAngle: endAngle - preAngle,
                endAngle: endAngle,
                brushType: 'fill',
                color: darkColor
            },
            _color: zrColor.getLinearGradient(x + r0 * Math.cos(endAngle, true), y - r0 * Math.sin(endAngle, true), x + r0 * Math.cos(endAngle - preAngle, true), y - r0 * Math.sin(endAngle - preAngle, true), [
                [
                    0,
                    clolrList[i * 2 + 32]
                ],
                [
                    1,
                    clolrList[i * 2 + 33]
                ]
            ])
        }));
        endAngle -= preAngle;
    }
    var n = 0;
    if (options.progress != null) {
        // 指定进度
        addShapeHandle(background);
        n = this.adjust(options.progress, [
            0,
            1
        ]).toFixed(2) * 100 / 5;
        shapeRing.highlightStyle.text = n * 5 + '%';
        addShapeHandle(shapeRing);
        for (var i = 0; i < 20; i++) {
            shapeList[i].highlightStyle.color = i < n ? shapeList[i]._color : darkColor;
            addShapeHandle(shapeList[i]);
        }
        addShapeHandle(textShape);
        refreshHandle();
        return;
    }
    // 循环显示
    return setInterval(function () {
        addShapeHandle(background);
        n += n >= 20 ? -20 : 1;
        // shapeRing.highlightStyle.text = n * 5 + '%';
        addShapeHandle(shapeRing);
        for (var i = 0; i < 20; i++) {
            shapeList[i].highlightStyle.color = i < n ? shapeList[i]._color : darkColor;
            addShapeHandle(shapeList[i]);
        }
        addShapeHandle(textShape);
        refreshHandle();
    }, effectOption.timeInterval);
};
module.exports = Ring || module.exports;;